package view.backing.empresa;

import chemtools_logica.Beans.EmpresaBean;

import chemtools_logica.Beans.UsuarioBean;

import chemtools_logica.Entidades.Ubigeo;

import chemtools_logica.LN.IR.LN_SFEmpresaRemote;

import chemtools_logica.LN.IR.LN_SFUbigeoRemote;

import java.util.ArrayList;

import java.util.Hashtable;

import java.util.List;

import javax.annotation.PostConstruct;

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import javax.naming.Context;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import javax.servlet.http.HttpSession;

import oracle.adf.view.rich.component.rich.RichForm;

import oracle.adf.view.rich.component.rich.RichPopup;
import oracle.adf.view.rich.component.rich.data.RichTable;

import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice;
import oracle.adf.view.rich.component.rich.layout.RichPanelGridLayout;
import oracle.adf.view.rich.component.rich.nav.RichButton;

import org.apache.myfaces.trinidad.event.SelectionEvent;

import view.backing.Utils.Utils;

public class Frm_empresa {

    private RichForm formEmpresa;
    private bSessionScopeBeanempresa sessionScopeBeanempresa = new bSessionScopeBeanempresa();
    private LN_SFEmpresaRemote lN_SFEmpresaRemote;
    private LN_SFUbigeoRemote lN_SFUbigeoRemote;
    private RichTable tb_empresa;
    private RichPopup pop_nuevo;
    private RichButton btn_editar;
    private RichPopup pop_editEmpresa;
    private RichPanelGridLayout pf_busqueda;
    private RichSelectOneChoice selectDepartamentoBusqueda;
    private RichSelectOneChoice selectProvinciaBusqueda;
    private RichSelectOneChoice selectDistritoBusqueda;
    private RichSelectOneChoice selectDepartamentoNuevo;
    private RichSelectOneChoice selectProvinciaNuevo;
    private RichSelectOneChoice selectDistritoNuevo;

    public Frm_empresa(){
        
    }
    
    @PostConstruct 
    public void methodInvokeOncedOnPageLoad() {
        try {
            final Context context = getInitialContext();
            lN_SFEmpresaRemote = (LN_SFEmpresaRemote) context.lookup("map-LN_SFEmpresa#chemtools_logica.LN.IR.LN_SFEmpresaRemote"); 
            lN_SFUbigeoRemote = (LN_SFUbigeoRemote) context.lookup("map-LN_SFUbigeo#chemtools_logica.LN.IR.LN_SFUbigeoRemote"); 
        }catch(Exception e){  }
        
        HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        UsuarioBean usuario = (UsuarioBean) sesion.getAttribute("usuario");
        sessionScopeBeanempresa.setUsuario(usuario);

        sessionScopeBeanempresa.setListaEmpresa(lN_SFEmpresaRemote.getAllEmpresas());
        sessionScopeBeanempresa.setListaEstados(this.llenarEstados());
        sessionScopeBeanempresa.setListaDepartamentos(this.llenarDepartamentos());
        
        sessionScopeBeanempresa.setInit(0);  
    }
    
    public void busquedaEmpresa(ActionEvent event){
        EmpresaBean bean= new EmpresaBean();
        
        bean.setRazonSocial(sessionScopeBeanempresa.getRazonSocialBusqueda());
        bean.setRuc(sessionScopeBeanempresa.getRucBusqueda());
        bean.setEstado(sessionScopeBeanempresa.getEstadoBusqueda());
        bean.setIdDistrito(sessionScopeBeanempresa.getDistritoBusqueda());
        bean.setIdDepartamento(sessionScopeBeanempresa.getDepartamentoBusqueda());
        bean.setIdProvicia(sessionScopeBeanempresa.getProvinciaBusqueda());
        
        sessionScopeBeanempresa.setListaEmpresa(new ArrayList<EmpresaBean>());
        List<EmpresaBean> lista = lN_SFEmpresaRemote.getListEmpresaBusqueda(bean);
        sessionScopeBeanempresa.setListaEmpresa(lista);
        getTb_empresa().setValue(lista);
        
        Utils.addTarget(getTb_empresa());
        Utils.clearRowSelection(getTb_empresa());
    }
    
    public void abrirModalAdd(ActionEvent ae){
        sessionScopeBeanempresa.setRazonSocialNuevo("");
        sessionScopeBeanempresa.setRucNuevo("");
        sessionScopeBeanempresa.setDireccionNuevo("");
        sessionScopeBeanempresa.setPaginaWebNuevo("");
        sessionScopeBeanempresa.setEncargadoNuevo("");
        sessionScopeBeanempresa.setRucNuevo("");
        sessionScopeBeanempresa.setListaDepartamentosNuevo(this.llenarDepartamentos());
        sessionScopeBeanempresa.setListaProvinciasNuevo(new ArrayList());
        sessionScopeBeanempresa.setListaDistritosNuevo(new ArrayList());
        sessionScopeBeanempresa.setDepartamentoNuevo(null);
        sessionScopeBeanempresa.setProvinciaNuevo(null);
        sessionScopeBeanempresa.setDistritoNuevo(null);
        sessionScopeBeanempresa.setTelefonoNuevo("");
        sessionScopeBeanempresa.setCorreoNuevo("");
        getSelectDepartamentoNuevo().setValue(null);
        getSelectProvinciaNuevo().setValue(null);
        getSelectDistritoNuevo().setValue(null);
        Utils.addTargetMany(getSelectDepartamentoNuevo(),getSelectProvinciaNuevo(),getSelectDistritoNuevo());
        Utils.showPopUpMIDDLE(pop_nuevo);
    }
    
    public void agregarEmpresa(ActionEvent ae){
        EmpresaBean beanEmpresa = new EmpresaBean();
        
        beanEmpresa.setDireccion(sessionScopeBeanempresa.getDireccionNuevo());
        beanEmpresa.setEstado(1);
        beanEmpresa.setIdDepartamento(sessionScopeBeanempresa.getDepartamentoNuevo());
        beanEmpresa.setIdProvicia(sessionScopeBeanempresa.getProvinciaNuevo());
        beanEmpresa.setIdDistrito(sessionScopeBeanempresa.getDistritoNuevo());
        beanEmpresa.setNombreEncargado(sessionScopeBeanempresa.getEncargadoNuevo());
        beanEmpresa.setRazonSocial(sessionScopeBeanempresa.getRazonSocialNuevo());
        beanEmpresa.setRuc(sessionScopeBeanempresa.getRucNuevo());
        beanEmpresa.setTipo(1);
        beanEmpresa.setPaginaWeb(sessionScopeBeanempresa.getPaginaWebNuevo());
        beanEmpresa.setTelefono(sessionScopeBeanempresa.getTelefonoNuevo());
        beanEmpresa.setCorreo(sessionScopeBeanempresa.getCorreoNuevo());
        
        lN_SFEmpresaRemote.addEmpresa(beanEmpresa);
        Utils.showMessage("Se Agrego una nueva empresa a el sistema", null, 2);
        getPop_nuevo().hide();
        this.limpiaryRefrescar(null);
    }
    
    public void abrilModalEdit(ActionEvent ae){
        EmpresaBean empresaBean = sessionScopeBeanempresa.getEmpresaBean();
        sessionScopeBeanempresa.setDepartamentoEdit(empresaBean.getNombreDepartamento());
        sessionScopeBeanempresa.setDireccionEdit(empresaBean.getDireccion());
        sessionScopeBeanempresa.setDistritoEdit(empresaBean.getNombreDistrito());
        sessionScopeBeanempresa.setEncargadoEdit(empresaBean.getNombreEncargado());
        sessionScopeBeanempresa.setEstadoEdit(empresaBean.getEstado());
        sessionScopeBeanempresa.setIdEmpresaEdit(empresaBean.getIdEmpresa());
        sessionScopeBeanempresa.setPaginaWebEdit(empresaBean.getPaginaWeb());
        sessionScopeBeanempresa.setProvinciaEdit(empresaBean.getNombreProvincia());
        sessionScopeBeanempresa.setRazonSocialEdit(empresaBean.getRazonSocial());
        sessionScopeBeanempresa.setRucEdit(empresaBean.getRuc());
        sessionScopeBeanempresa.setTelefonoEdit(empresaBean.getTelefono());
        sessionScopeBeanempresa.setCorreoEdit(empresaBean.getCorreo());
        
        sessionScopeBeanempresa.setListaDepartamentosNuevo(this.llenarDepartamentos());
        
        Utils.showPopUpMIDDLE(getPop_editEmpresa());
    }
    
    public void editEmpresa(ActionEvent ae){
        EmpresaBean empresaBean = sessionScopeBeanempresa.getEmpresaBean();
        
        empresaBean.setNombreEncargado(sessionScopeBeanempresa.getEncargadoEdit());
        empresaBean.setPaginaWeb(sessionScopeBeanempresa.getPaginaWebEdit());
        empresaBean.setEstado(sessionScopeBeanempresa.getEstadoEdit());
        empresaBean.setTelefono(sessionScopeBeanempresa.getTelefonoEdit());
        empresaBean.setCorreo(sessionScopeBeanempresa.getCorreoEdit());
        empresaBean.setDireccion(sessionScopeBeanempresa.getDireccionEdit());
        lN_SFEmpresaRemote.editarEmpresa(empresaBean);
        Utils.showMessage("Se Modifico la Empresa Correctamente", null, 2);
        this.limpiaryRefrescar(null);
        getPop_editEmpresa().hide();
    }
    
    public void selectEmpresa(SelectionEvent se){
        RichTable t = (RichTable)se.getSource();
        EmpresaBean empresaBean = (EmpresaBean) t.getSelectedRowData();
        
        sessionScopeBeanempresa.setEmpresaBean(empresaBean);
        
        btn_editar.setDisabled(false);
        Utils.addTarget(btn_editar);
    }
    
    public void limpiaryRefrescar(ActionEvent ae){
        /*  getSelectDepartamentoBusqueda().setValue(null);
        getSelectProvinciaBusqueda().setValue(null);
        getSelectDistritoBusqueda().setValue(null);
        sessionScopeBeanempresa.setListaDistritos(new ArrayList());
        sessionScopeBeanempresa.setListaProvincias(new ArrayList());
        sessionScopeBeanempresa.setDepartamentoBusqueda(null);
        sessionScopeBeanempresa.setDistritoBusqueda(null);
        sessionScopeBeanempresa.setProvinciaBusqueda(null);
        Utils.addTargetMany(getSelectDepartamentoBusqueda(),getSelectDistritoBusqueda(),getSelectProvinciaBusqueda()); */
        sessionScopeBeanempresa.setEstadoBusqueda(-1);
        sessionScopeBeanempresa.setRazonSocialBusqueda(null);
        sessionScopeBeanempresa.setRucBusqueda(null);
        /* sessionScopeBeanempresa.setDepartamentoBusqueda(null);
        sessionScopeBeanempresa.setProvinciaBusqueda(null);
        sessionScopeBeanempresa.setDistritoBusqueda(null);
        sessionScopeBeanempresa.setListaEmpresa(new ArrayList<EmpresaBean>()); */
        
        sessionScopeBeanempresa.setListaEmpresa(lN_SFEmpresaRemote.getAllEmpresas());
        getTb_empresa().setValue(lN_SFEmpresaRemote.getAllEmpresas());
       
        
        /*  Utils.addTargetMany(getSelectDepartamentoBusqueda(),getSelectProvinciaBusqueda(),getSelectDistritoBusqueda()); */
        
       
        Utils.addTarget(getTb_empresa());
        Utils.addTarget(getPf_busqueda());
        
        getBtn_editar().setDisabled(true);
        Utils.addTarget(getBtn_editar());
        Utils.clearRowSelection(getTb_empresa());
    }

    public ArrayList llenarEstados() {
        ArrayList estados = new ArrayList();
        estados.add(new SelectItem(0,"Inactivo"));
        estados.add(new SelectItem(1,"Activo"));
        
        return estados;
    }
    
    //BUSQUEDA
    public ArrayList llenarDepartamentos() {
        ArrayList departamentos = new ArrayList();
        List<Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(null, "00", "00");
        for(Ubigeo ent : lista){
            departamentos.add(new SelectItem(ent.getCod_dept(),ent.getDepartamento()));
        }
        return departamentos;
    }
    
    public void llenarProvincias(ValueChangeEvent valueChangeEvent){
        String idDepartamento = valueChangeEvent.getNewValue().toString();
        ArrayList provincias = new ArrayList();
        List<Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(idDepartamento,null,"00");
        for(Ubigeo ent : lista){
            provincias.add(new SelectItem(ent.getCod_prov(),ent.getProvincia()));
        }
        sessionScopeBeanempresa.setListaProvincias(provincias);
        getSelectProvinciaBusqueda().setValue("00");
        Utils.addTarget(getSelectProvinciaBusqueda());
        sessionScopeBeanempresa.setListaDistritos(new ArrayList());
        Utils.addTarget(getSelectDistritoBusqueda());
        
    }
    
    public void llenarDistritos(ValueChangeEvent valueChangeEvent){
        String idProvincia = valueChangeEvent.getNewValue().toString();
        ArrayList distritos = new ArrayList();
        List<Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(getSelectDepartamentoBusqueda().getValue().toString(),idProvincia,null);
        for(Ubigeo ent : lista){
            distritos.add(new SelectItem(ent.getCod_dist(),ent.getDistrito()));
        }
        sessionScopeBeanempresa.setListaDistritos(distritos);
        getSelectDistritoBusqueda().setValue("00");
        Utils.addTarget(getSelectDistritoBusqueda());
    }
    
    //NUEVO    
    public void llenarProvinciasNuevo(ValueChangeEvent valueChangeEvent){
        String idDepartamento = valueChangeEvent.getNewValue().toString();
        ArrayList provincias = new ArrayList();
        List<Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(idDepartamento, null, "00");
        for(Ubigeo ent : lista){
            provincias.add(new SelectItem(ent.getCod_prov(),ent.getProvincia()));
        }
        sessionScopeBeanempresa.setListaProvinciasNuevo(provincias);
        getSelectProvinciaNuevo().setValue("00");
        Utils.addTarget(getSelectProvinciaNuevo());
        sessionScopeBeanempresa.setListaDistritosNuevo(new ArrayList());
        Utils.addTarget(getSelectDistritoNuevo());
    }
    
    public void llenarDistritosNuevo(ValueChangeEvent valueChangeEvent){
        String idProvincia = valueChangeEvent.getNewValue().toString();
        ArrayList distritos = new ArrayList();
        List<Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(getSelectDepartamentoNuevo().getValue().toString(), idProvincia, null);;
        for(Ubigeo ent : lista){
            distritos.add(new SelectItem(ent.getCod_dist(),ent.getDistrito()));
        }
        sessionScopeBeanempresa.setListaDistritosNuevo(distritos);
        getSelectDistritoNuevo().setValue("00");
        Utils.addTarget(getSelectDistritoNuevo());
    }

    private static Context getInitialContext() throws NamingException {
        Hashtable env = new Hashtable();
        // WebLogic Server 10.x/12.x connection details
        env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
        return new InitialContext(env);
    }

    public void setFormEmpresa(RichForm formEmpresa) {
        this.formEmpresa = formEmpresa;
    }

    public RichForm getFormEmpresa() {
        return formEmpresa;
    }

    public void setTb_empresa(RichTable tb_empresa) {
        this.tb_empresa = tb_empresa;
    }

    public RichTable getTb_empresa() {
        return tb_empresa;
    }

    public void setPop_nuevo(RichPopup pop_nuevo) {
        this.pop_nuevo = pop_nuevo;
    }

    public RichPopup getPop_nuevo() {
        return pop_nuevo;
    }

    public void setBtn_editar(RichButton btn_editar) {
        this.btn_editar = btn_editar;
    }

    public RichButton getBtn_editar() {
        return btn_editar;
    }

    public void setPop_editEmpresa(RichPopup pop_editEmpresa) {
        this.pop_editEmpresa = pop_editEmpresa;
    }

    public RichPopup getPop_editEmpresa() {
        return pop_editEmpresa;
    }

    public void setSessionScopeBeanempresa(bSessionScopeBeanempresa sessionScopeBeanempresa) {
        this.sessionScopeBeanempresa = sessionScopeBeanempresa;
    }

    public bSessionScopeBeanempresa getSessionScopeBeanempresa() {
        return sessionScopeBeanempresa;
    }

    public void setPf_busqueda(RichPanelGridLayout pf_busqueda) {
        this.pf_busqueda = pf_busqueda;
    }

    public RichPanelGridLayout getPf_busqueda() {
        return pf_busqueda;
    }

    public void setSelectDepartamentoBusqueda(RichSelectOneChoice selectDepartamentoBusqueda) {
        this.selectDepartamentoBusqueda = selectDepartamentoBusqueda;
    }

    public RichSelectOneChoice getSelectDepartamentoBusqueda() {
        return selectDepartamentoBusqueda;
    }

    public void setSelectProvinciaBusqueda(RichSelectOneChoice selectProvinciaBusqueda) {
        this.selectProvinciaBusqueda = selectProvinciaBusqueda;
    }

    public RichSelectOneChoice getSelectProvinciaBusqueda() {
        return selectProvinciaBusqueda;
    }

    public void setSelectDistritoBusqueda(RichSelectOneChoice selectDistritoBusqueda) {
        this.selectDistritoBusqueda = selectDistritoBusqueda;
    }

    public RichSelectOneChoice getSelectDistritoBusqueda() {
        return selectDistritoBusqueda;
    }

    public void setSelectDepartamentoNuevo(RichSelectOneChoice selectDepartamentoNuevo) {
        this.selectDepartamentoNuevo = selectDepartamentoNuevo;
    }

    public RichSelectOneChoice getSelectDepartamentoNuevo() {
        return selectDepartamentoNuevo;
    }

    public void setSelectProvinciaNuevo(RichSelectOneChoice selectProvinciaNuevo) {
        this.selectProvinciaNuevo = selectProvinciaNuevo;
    }

    public RichSelectOneChoice getSelectProvinciaNuevo() {
        return selectProvinciaNuevo;
    }

    public void setSelectDistritoNuevo(RichSelectOneChoice selectDistritoNuevo) {
        this.selectDistritoNuevo = selectDistritoNuevo;
    }

    public RichSelectOneChoice getSelectDistritoNuevo() {
        return selectDistritoNuevo;
    }
}
